#ifndef __LOG_H
#define __LOG_H

#include "hdl_auto_init.h"
#include "hdl_log.h"
#include "stm32f4xx.h"
#include <stdio.h>

#define LOG_DEBUG

#ifndef LOG_PRINTF

#define LOG_PRINTF printf

#define LOG_PRINTF_INTERFACE USART3

#endif

#if defined(LOG_DEBUG)

/* debug level log */
#ifdef log_d
#undef log_d // 取消旧的宏定义
#endif

#define log_d(...)                                                             \
  LOG_PRINTF("[log_d] (%s:%d) ", __FUNCTION__, __LINE__);                      \
  LOG_PRINTF(__VA_ARGS__);                                                     \
  LOG_PRINTF("\r\n")

#else

#ifdef log_d
#undef log_d
#endif

#define log_d(...)

#endif

#ifdef log_e
#undef log_e
#endif

/* error level log */
#define log_e(...)                                                             \
  LOG_PRINTF("[log_e](%s:%d)", __FUNCTION__, __LINE__);                        \
  LOG_PRINTF(__VA_ARGS__);                                                     \
  LOG_PRINTF("\r\n")

/* info level log */
#ifdef log_i
#undef log_i
#endif

#define log_i(...)                                                             \
  LOG_PRINTF("[log_i]");                                                       \
  LOG_PRINTF(__VA_ARGS__);                                                     \
  LOG_PRINTF("\r\n")

#endif
